package com.doubleview.demo

import org.codehaus.groovy.runtime.typehandling.GroovyCastException

/**
 * @author huchengchao@kuaishou.com
 * Created on 2021-11-20
 */

// Groovy中的单引号用于String，双引号结果是String或GString，取决于文字中是否有插值。
assert 'c'.getClass() == String
assert "c".getClass() == String
assert "c${1}".getClass() in GString

//只有在赋给char类型的变量时，Groovy会自动将单字符String转换为char。 当调用类型为char的参数的方法时，我们需要显式转换或确保该值已预先转换。
char a = 'a'
assert Character.digit(a, 16) == 10: 'But Groovy does boxing'
assert Character.digit((char) 'a', 16) == 10

try {
    assert Character.digit('a', 16) == 10
    assert false: 'Need explicit cast'
} catch (MissingMethodException e) {
    e.printStackTrace()
}


// Groovy支持两种类型的转换，在转换为char的情况下，在转换multi-char 时存在微妙的差别。 Groovy风格的转换是更宽松的，将采取第一个字符，而C风格的转换将失败，异常。
// for single char strings, both are the same
assert ((char) "c").class == Character
assert ("c" as char).class == Character

// for multi char strings they are not
try {
    ((char) 'cx') == 'c'
    assert false: 'will fail - not castable'
} catch (GroovyCastException e) {
    e.printStackTrace()
}
assert ('cx' as char) == 'c'
assert 'cx'.asType(char) == 'c'